/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tbp.persitence.dao.impl;

import br.com.tbp.exception.PersistenciaException;
import br.com.tbp.model.domain.StatusPedido;
import br.com.tbp.persitence.GerenciadorDeConexao;
import br.com.tbp.persitence.GerenciadorDeQuery;
import br.com.tbp.persitence.dao.SituacaoDoPedidoDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Diego Freire
 */
public class SituacaoDoPedidoDaoImpl implements SituacaoDoPedidoDao {

    private Connection conn = null;
    private PreparedStatement pr = null;
    private ResultSet rs = null;

    public StatusPedido pesquisar(long id) throws PersistenciaException {
        StatusPedido s = null;

        try {
            conn = GerenciadorDeConexao.abreConexao();
            pr = conn.prepareStatement(GerenciadorDeQuery.getQuery("situacao.select.id"));
            pr.setLong(1, id);
            rs = pr.executeQuery();
            if (rs != null) {
                if (rs.first()) {
                    s = this.criarSituacao(rs);
                }
            }
        } catch (SQLException exc) {
            StringBuilder msg = new StringBuilder("Não foi possível pesquisar a situação.");
            msg.append("\nMotivo: ").append(exc.getMessage());
            throw new PersistenciaException(msg.toString());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn, pr, rs);
        }

        return s;
    }

    private StatusPedido criarSituacao(ResultSet rs) throws PersistenciaException {
        StatusPedido s = null;

        try {
            s = new StatusPedido(rs.getLong("id_situacao"), rs.getString("descricao"));
        } catch (SQLException exc) {
            StringBuilder msg = new StringBuilder("Não foi possível obter os dados da situação.");
            msg.append("\nMotivo: ").append(exc.getMessage());
            throw new PersistenciaException(msg.toString());
        }

        return s;
    }

    public List<StatusPedido> pesquisar() throws PersistenciaException {
        List<StatusPedido> lista = new ArrayList<StatusPedido>();
        try {
            conn = GerenciadorDeConexao.abreConexao();
            pr = conn.prepareStatement("select * from situacao where id_situacao > 0 order by id_situacao;");
            rs = pr.executeQuery();
            while(rs.next()) {
                StatusPedido status = this.criarSituacao(rs);
                lista.add(status);
            }

        } catch (SQLException exc) {
            StringBuilder msg = new StringBuilder("Não foi possível pesquisar os status.");
            msg.append("\nMotivo: ").append(exc.getMessage());
            throw new PersistenciaException(msg.toString());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn, pr, rs);
        }
        return lista;
    }
}
